#ifndef __ABSTRACTION_IMP_H__
#define __ABSTRACTION_IMP_H__

class AbstractionImp
{
public:
    AbstractionImp() = default;
    virtual ~AbstractionImp() = default;

    virtual void Operation() = 0;
};

class ConcreteAbstractionImpA : public AbstractionImp
{
public:
    ConcreteAbstractionImpA() = default;
    ~ConcreteAbstractionImpA() = default;

    virtual void Operation();
};

class ConcreteAbstractionImpB : public AbstractionImp
{
public:
    ConcreteAbstractionImpB() = default;
    ~ConcreteAbstractionImpB() = default;

    virtual void Operation();
};


#endif

